package com.gxc.stack;

import java.util.Stack;

/**
 * 如何仅用队列结构实现栈结构?
 *
 * 解法：
 * 准备两个队列，队列a，队列b
 * 添加时，当两个队列都为空，往队列a添加，如果有队列不为空，则往非空队列添加
 * 弹出时，把非空队列除了最后一个元素都添加至空队列，然后弹出非空队列最后一个元素
 */
public class QueueStack {

    private Stack<Integer> a;
    private Stack<Integer> b;

    public void add(Integer num) {
        if (!a.isEmpty()) {
            a.push(num);
        } else if (b.isEmpty()) {
            b.push(num);
        } else {
            a.push(num);
        }
    }

    public Integer pop() throws Exception {
        if (a.isEmpty() && b.isEmpty()) throw new Exception("数据为空");

        Stack<Integer> empty = a.isEmpty() ? a: b;
        Stack<Integer> notEmpty = a.isEmpty() ? b: a;

        while (notEmpty.size()>1) {
            empty.push(notEmpty.pop());
        }
        return notEmpty.pop();
    }
}
